cJass, vJass и Jass2 - разные концы одной палки. Но после освоения структур, которые есть в vJass и освоения синтаксиса cJass ты вполне сможешь быстро освоить любой язык C-семейства.
вопервых ты в 1 и ту же ячейку пытаешся записать 2 значения (location и integer)
во вторых ты создаёш область по кординатам а следующей строчкой находиш эти же кординаты с помощью функций
в 3 ты сохранял точку в хэш и сразу же удалял её
и в 4 ты не инициализировал хэш
function Trig_SlayerUlt_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A00V'
endfunction
function Ultaction takes nothing returns nothing
local timer st = GetExpiredTimer()
local integer sid = GetHandleId(st)
local unit su = LoadUnitHandle (udg_Hash, sid, 0)
if IsUnitType(GetEnumUnit(), UNIT_TYPE_STRUCTURE) == false and IsUnitEnemy( GetEnumUnit(), GetOwningPlayer(su)) == true then
call UnitDamageTargetBJ( su, GetEnumUnit(), 210.00, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
endif
set su = null
endfunction
function UltimateRun takes nothing returns nothing
local timer st = GetExpiredTimer()
local integer sid = GetHandleId(st)
local unit su = LoadUnitHandle (udg_Hash, sid, 0)
local integer suid = GetHandleId(su)
local location suloc = LoadLocationHandle(udg_Hash, sid, 1)
local effect sueff = LoadEffectHandle (udg_Hash, sid, 2)
local real x = GetLocationX( suloc )
local real y = GetLocationY( suloc )
local rect surect = Rect( x - 600.00*0.5, y - 600.00*0.5, x + 600.00*0.5, y + 600.00*0.5 )
local location random = Location (GetRandomReal(x-600*.5,x+600*.5), GetRandomReal (y-600*.5, y+600*.5))
local integer sc = LoadInteger (udg_Hash, sid, 10)
call SetUnitPositionLoc( su, random )
call SetUnitAnimation( su, "attack" )
call AddSpecialEffectLocBJ( random, "Abilities\\Spells\\Human\\Thunderclap \\ThunderClapCaster.mdl" )
call DestroyEffectBJ ( GetLastCreatedEffectBJ() )
call AddSpecialEffectLocBJ( random, "Abilities\\Spells\\Items\\AIil\\AIilTarget.mdl" )
call DestroyEffectBJ ( GetLastCreatedEffectBJ() )
call ForGroupBJ ( GetUnitsInRangeOfLocAll(250.00, suloc), function Ultaction )
set bj_wantDestroyGroup=true
call SaveInteger(udg_Hash,sid,10,sc + 1)
if sc >= 10 then
call SetUnitPositionLoc( su, suloc )
call DestroyEffectBJ( sueff )
call SetUnitPathing( su, true )
call SetUnitInvulnerable( su, false )
call PauseUnitBJ( false, su )
call SetUnitVertexColorBJ( su, 100, 100, 100, 0.00 )
call PauseTimer(st)
call DestroyTimer(st)
call FlushChildHashtable(udg_Hash, sid)
endif
set suloc = null
set random = null
set st = null
set su = null
set sueff = null
endfunction
function Trig_SlayerUlt_Actions takes nothing returns nothing
local timer st = CreateTimer()
local integer sid = GetHandleId(st)
local unit su = GetTriggerUnit()
local integer suid = GetHandleId(su)
local location suloc = GetUnitLoc(su)
local effect sueff
local real x=GetUnitX(su)
local real y=GetUnitY(su)
call AddSpecialEffectTargetUnitBJ ( "hand right", su, "Abilities\\Weapons \\PhoenixMissile\\Phoenix_Missile.mdl" )
set sueff = GetLastCreatedEffectBJ()
call SetUnitPathing( su, false )
call SetUnitInvulnerable( su, true )
call PauseUnitBJ( true, su )
call SetUnitVertexColorBJ( su, 100, 100, 100, 50.00 )
call SaveUnitHandle(udg_Hash, sid, 0, su)
call SaveAgentHandle(udg_Hash, sid, 1, suloc)
call SaveAgentHandle(udg_Hash, sid, 2, sueff)
call SaveAgentHandle(udg_Hash, suid, 0, st)
call SaveInteger (udg_Hash, sid, 10, 1)
call TimerStart( st, .3, true, function UltimateRun )
set suloc = null
set st = null
set su = null
set sueff = null
endfunction
===========================================================================
function InitTrig_SlayerUlt takes nothing returns nothing
set gg_trg_SlayerUlt = CreateTrigger ( )
set udg_Hash=InitHashtable()
call TriggerRegisterAnyUnitEventBJ ( gg_trg_SlayerUlt, EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerAddCondition ( gg_trg_SlayerUlt, Condition( function Trig_SlayerUlt_Conditions ) )
call TriggerAddAction ( gg_trg_SlayerUlt, function Trig_SlayerUlt_Actions )
endfunction
filterGetUnitsOfTypeIdAll - фильтр, вместо него должно быть написано либо null или Condition( function XXX) Короче зачем нужен фильтр? Фильтр при выборе всех юнитов сразу отсеивает не нужных, если по условию не подходит, то выкидывает.. Вам сразу достается готовая группа с нужными юнитами
А в качестве переменных используй GetFilterUnit, GetFilterPlayer. На гуи по-другому называют MatchingUnit
где XXX - название функции, эта функция возвращает boolean (то есть истину или ложь)
вбей в поиск названии функции, может найдешь ответ
например выделяем все здания UNIT_TYPE_STRUCTURE, а те, кто не является зданием отсеиваем
function XXX takes nothing returns boolean
return IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE)
endfunction
насчет статьи не видел, это придет с пониманием. Главное начать. Сначала тупо конверт, и оптимизация. А дальше можешь сам
что у тебя там не работает скидывай сюда
Я знаю только один способ избавления от утечек - писать код без них.Тебе нужен кто-то знающий игровые скрипты или злосчастный Jass. Иначе уровень неопределённости вопроса не позволит подсказать что-то дельное.
На JASS-е есть функция GetLearnedSkill(), которая выдает rawcode выученного умения. Создаешь переменную типа "целочисленная" с названием SkillCode, потом в начале действий триггера пишешь через Custom Script что-то типо этого:
set udg_SkillCode=GetLearnedSkill()
и затем делаешь какие тебе там нужны сравнения на переменную SkillCode.
ИИ написать, сами скиллы юзают тока крипы подконтрольные ИИ - к примеру нейтральновраждебные.
Так же можно юзать скилл - Сфера замедления, это орб эффект который срабатывая накладывает на цель атаки указанный в его настройках скилл, подойдет для карт типа Castle Fight.
ИИ чтоли не кастует? Сделай триггерный каст, Событие - юнит обнаружил цель в пределах досягаемости, проглотить не в кулдауне и цель неуязвимый враг, пойти и проглотить юнита...
Fireproof, попробуй в РО у юнита поменять "Графика - Анимация - обратный ход броска" и "Графика - Анимация - точка броска" на 0. Правда, это уберёт время каста для всех умений у этого юнита.
Ну тебе нужно чтобы был прямо таки бафф который можно рассеивать?
Для начала сделай способность, и баф на основе какой нибудь пустышки, подойдет ярость у некромантов, так же переодический триггер который раз в пол секунды проверяет всех юнитов в группе, есть ли у них бафф если юнит мертв или у него нет баффа, то у юнита удаляется способность на доп урон зданиям и сам унит удаляется из группы.
При касте твоим шаманов заклинания на цель, ты добавляешь цель заклинания в группу, которую и перебирает описанный выше триггер.
Надеюсь понятно?
datar1231, Именно поэтому говорят не делать 2 две способности от друга потому когда юнита приходит приказ на использование способности он использует твою нестандартную способность но основываясь на айди стандартной способности или делай на основе другой или незанаю подействует ли канал.
устанавливает юниту, записанному в переменную udg_u (в редакторе переменных просто u), ману в количестве равном 1000
также доступно добавление юниту здоровья или маны:
ScopteRectuS, Я решил проблему там баг, если указать регион как точку назначения портала, то с ним триггеры перестают работать. Я просто указал другой регион. biridius, Ну это альфа версия, за 5 мин сделал, знаю об утечках.
событие - игрок пишет в чат сообщение "-privat" как полное совпадение
условие - имя игрока == "Maharajab1k"
действия - нужные при срабатывании команды действия
Для остальных игроков команды не будет существовать как данности.
Вместо (юнит триггера) вставишь своего героя. (Скрин внизу)
Редактор обьектов ---> Способности ---> нейтрально-враждебные ---> герои ---> повышение характеристик (редактируешь или создаешь нестандартную и редактируешь под себя)
перед удалением в редакторе анимации нажмите на Кадры>>>Очистить, потом удаляйте саму анимацию по завершению в редакторе вершин Оптимизация все пункты из графы.
При конвертации моделей из игр в MDX их вес велик как и вес их текстур ! Я оптимизирую и сжимаю модель через MDLvis а текстуры через BLP Laboratory но их вес все еще внушителен ( Есть ли другие варианты среза веса без дефектов материала ?
Нет. Только удаление лишних анимаций. Остальную оптимизацию веса сделает mdlvis.
При импорте некоторых моделей в карту возникает проблема с их выбором при манипуляции ( Передвижения ) словно их Выбор отсутствует , Думаю некоторые с подобным сталкивались ...
Если модель нельзя выделить в игре курсором, у неё отсутствуют collision shapes (формы коллизии). Их можно добавить в War3ModelEditor -> Окна -> Редактор узлов -> правый клик -> Создать форму - > отредактировать размеры и положение. Их можно добавить несколько, чтобы покрыть модель целиком. Они отвечают за взаимодействие модели с курсором.
Один ресурс - один вопрос, после пойдут замечания.
Manulli, на 1.26а есть способ обойти этот лимит с помощью мемхака но он очень сложный
а учитывая твои вопросы ты не сможешь это сделать
так что лучше делай как все
т.е. карта на стандартных моделях а mix заменяет их на твои
в результате те у кого есть mix будут видеть твои модели а те у кого нету будут видеть стандартные модели
ну и в игре сообщение выведи что можно скачать архив с крутыми моделями на таком то сайте
Карта со всеми утечками и описанием их.
Вместо проклятия банши можно юзать туман(не рекоменд) или безмолвие(там есть вроде бы шанс промаха).
Ещё можно сделать ауру на основе пламени феникса, которое действует на своих.
Юнит повреждён
урон меньше 1
источник - союзный герой
дать уклонение
вейт/таймер
убрать уклонение если триг юнит не имеет баффа пламени(длительность регулируем)
1
Патиссончик, про центр области не заметил
точка каждый раз создаётся заново и это утечка Патиссончик, есть прога на сайте для записи логов
так же есть дебаг через прелоад на сайте
вот счётчик утечек
Tand, под кодировкой я имею в виду кодировку. Есть такая штука, определяет какими комбинациями нулей и едениц в бинарном виде кодируется каждый символ. Если при сохранении использована не та кодировка, которую понимает игра, то игра, соответственно, неможет сопоставить нулям и еденицам из файла конкретные символы, а значит ничего не показывает или показывает совсем не то, что было написано изначально.
Скачай Notepad++ -встроенные в винду средства годятся разве что заметки о жизни офисного планктона писать.
Сама функция TriggerSleepAction (Wait) не вызывает утечек, но багнута и при использовании в качестве задержек может способствовать утечкам, поэтому никаких вейтов в спеллах и всяких респаунах - только таймеры, вейты нужны для синхронизации данных и роликов и точка!
глобальный массив не нужен. сохраняй группу в хэш-таблицу на хэндл героя, потом загружай ее когда надо. у каждого героя будет своя группа
вот пример, молот бурь съедает юнита а удар грома ставит всех юнитов обратно
bigwolf2000, Чувак, тебе никто не скажет в чем дисинх даже если у него будет весь код перед глазами.
Нужно делать дебаги и играть с тестерами, чтобы отловить десинх.
Опен версию карту в студию если хотите помощи, все экстрасенсы не вышли из новогоднего отпуска...
Карту могу скинуть, но сюда или в лс?) Steal nerves:
на данный момент ничего неизвестно, поэтому могут посоветовать читать статью дока про десинк
есть логгер xgm.guru/p/wc3/95728
и нужно знать jass
Наверное скорее проблема в версии что плагина что макса ну поробуй другую версию макса с 2011-2014 и точно убедись что плагин именно под твою версию.
Наверное закрывай тему так как знатаков макса здесь не очень много.
Нормально экспортирую неодексом из восьмого и одиннадцатого макса. Экспортирует статичную модель? Перед экспортом нужно ведь выделить не только саму модельку, но ещё и кости.
Какой хочешь, если текстура в одной папке с моделью, например, обе на рабочем столе, то никакого, а если текстура в mpq-архиве игры, то путь к ней в архиве. Можно также поставить папку war3imported для удобства, чтобы не надо было пути удалять.
наверно наилучше через ракетный залп механика. Устанавливаеш интервал урона 0.15 урон ХХХ и кол-во выстрелов 1, ставишь ефект гранаты вместо ракет.
А так надо очень хорошо подумать и скомбинировать триггеры и заклинания.
Да, можно. Если знаешь как правильно выстроить случайное значение, то особого труда не составит построить определенный сценарий. Это можно реализовать через области, 3 изначальные области где будет выстраиваться тот или иной сценарий + через математический расчет координат областей можно выставить определенные предметы, но краше будет чистый "hardcore", выстраиваем случайное расположение точек, и в них что угодно, магазин, декор, и так далее...
На практике выглядит так:
При прогрузке карты выдаем случайное значение, которое имеет... скажем 3 триггера (3 комнаты). И в триггерах прописываем сценарий рендера локации комнаты, плюс триггер на эффект обитателя в области той или иной комнате.
Поскольку его не пугает наличие большого влияния промахов на геймплей - скорее всего он делает рпг. Имхо в рпг всегда клево смотрятся тексттаги полученного урона, для создания которых необходимы триггеры на отлов получения урона. А отлавливаемый урон - можно и прохилить.
Для прохила(и вообще всех манипуляций с задержкой в 0.00 сек) лично я юзаю такие костыли:
Либа здесь только для доп табуляции. Я за чистый жасс + дефайны.
library ZeroTimeEvent
globals
constant integer ZTEArraySize = 64//Even 32 is alot, 64 is too much! Exactly what I need!
timer Zero//Used for 0. sec uses
integer ZTECurrent = 0
unit array ZTEUnits[ZTEArraySize]
integer array ZTEIntegers[ZTEArraySize]
real array ZTEReals[ZTEArraySize]
trigger array ZTETriggers[ZTEArraySize]
endglobals
function ZeroTimeEvent takes nothing returns nothing
loop
set ZTECurrent = ZTECurrent - 1
call TriggerExecute( ZTETriggers[ZTECurrent] )
exitwhen ZTECurrent < 1
endloop
endfunction
#define ZTEAddUnit(u) = {
set ZTEUnits[ZTECurrent] = u
}
#define ZTEAddInteger(i) = {
set ZTEIntegers[ZTECurrent] = i
}
#define ZTEAddReal(r) = {
set ZTEReals[ZTECurrent] = r
}
#define ConfirmZTE(trig) = {
set ZTETriggers[ZTECurrent] = trig
set ZTECurrent = ZTECurrent + 1
call TimerStart( Zero, ZeroTime, false, function ZeroTimeEvent )
}
endlibrary
Каждую секунду проверяешь изменение золота у каждого игрока и заносишь в переменную. Если золота стало меньше чем указано в переменной, то установи такое количество золота у остальных игроков.
В редакторе объектов нужно в поле "Графика - нужная анимация" вписать "gold". Только как после этого будет выглядеть такой юнит, когда потащит древесину - не знаю, не проверял.
Ищи в редакторе объектов "пиктограмма на мини-карте" (или "нейтральное здание - значок на мини-карте") - это в редакторе войск.
Саму пиктограмму можно найти в игровом интерфейсе.
Это не скрывает надпись, но позволит добавить пиктограмму любому зданию. Прикрепил бы скрины, но редактора поблизости нет.
Пусть разлоганится и смотрит, главное, чтобы у него не было возможности смотреть и что-либо делать в проекте в авторизованном состоянии.
и что тебе это даст? Ну посмотрит он с аккаунта гостя твой ресурс, а не с обычного. Функция бана нужна только что бы запретить людям писать в проекте (и делать прочие активные действия для которых нужен аккаунт).
Кстати саму функцию тоже нужно подправить, насколько я помню она немного багнуто работала, ну и конечно она не запрещает ставить ресурсам оценки, это тоже надо будет пофиксить.
Хмм Вроде разобрался скрыть и показать функции почему то багуют всё дело
ОМГ сам затупил под ночь простите... Там есть еще одна похожая функция это свернуть развернуть спутал :) Всё теперь всё работает : D Ура теперь милая мультиборда будет на ресурсах а не громоздкая лидерборда (да еще и без иконок была)
Хм, сделав вот это, я добился разброса урона. Он работал только тогда, когда работало улучшение "Громовой молот". Правда, я так и не понял, какой именно параметр сделал это. Правда, он вроде бы бил по своим все равно. Надо будет покопаться в этом и попытать дать этой фигне какой-нибудь эффект для видимости.
Для видимости можно поставить в графу Графика - Цель какой-нибудь эффект, он будет срабатывать на всех дополнительных целях. А чтобы он по своим не бил, надо поставить в графу Радиус поражения - Цели, нужные тебе типы юнитов, по которым будет проходить эта атака.
Пункт " убить боевую единицу" отвечает за то сможет ли урон от яда убить Юнита, если флаг не установлен то у Юнита останется 1-2 хп. Но яд не может его убить.
Разумеется не работают яд. Стрелы на маг иммунитет, ибо это активный автокаст.
Чтобы автокаст стрелы работали на маг. Имун нужно чтобы способность относилась к герою, требуемый для изучения уровень был выше 1. Вот и все.
А касательно остальной части, если UnitUserData нигде не используется, создаешь массив юнитов и отрядов. Массив юнитов забиваешь своими капитанами. В UnitUserData капитана пихаешь его порядковый номер в массиве. Создаешь группу юнитов для этого капитана.
Добавление через каст способности.
Я бы делал через 2 разные абилки с одной и той же позицией в интерфейсе. Пока нужный тебе юнит не является частью отряда - у него таргетная абилка при касте которой на капитана он добавляется в группу соответствующего капитана и получает 2ю абилку взамен первой.
Касательно выделения этих пехотинцев - можно намутить что-то с передачей контроля или создать триггер, который будет снимать выделение с юнитов у которых есть 2я абилка. Если ты хочешь чтобы по одиночке можно было выделять пехотинцев - можешь создать переменную для каждого игрока с капитанами, куда будет просто записываться последний выбранный юнит. При снятии выделения - проверять не выбран ли этот же юнит, в случае чего не снимать выделение. Правда не уверен будет ли корректно работать :> В крайнем случае - будет работать в три клика вместо двух. Если я не ошибаюсь.
Касательно поведения этих пехотинцев - что-то реально стоящее сделать сложно. Возможно, но мне не с руки все расписывать :> Простейший вариант - приказывать пехотинцам после добавления в группу следовать за капитаном.
Добавление через атаку капитана
Триггер, проверяющий что капитан получил урон или атакован, как угодно. Далее любым способом проверяешь есть ли в группе этого капитана юниты. Если нет - выбираешь всех пехотинцев N радиусе, добавляешь в отряд, заменяешь абилку/либо просто приказываешь кастануть в капитана первую абилку.
ScopteRectuS, элементарно - custom value и триггер с событием - юнит отдал приказ без указания цели, условие - приказ равен применять автокаст или не применять автокаст. Ну и тут же запись кастом валуе на юнита, 1 включен, 0 отключен. Тоже самое можно сделать с хешьтаблицами, стркутурами.
Но кастом валуе ни требует нихрена, код примитивен, не вызывает утечек, не ресурсозатратен. Мне за вас это сделать а? Нет ну такое впечатление мы вчера открыли редактор карт....
Есть плагин для 3dMax и Gmax - NeoDex. Он позволяет импортировать и экспортировать .mdx.
Если нет макса - качай gmax, маленький и бесплатный, и конвертируй в fbx.
Есть плагин для 3dsMax и Gmax - NeoDex. Он позволяет импортировать и экспортировать .mdx. Если нет макса - качай Gmax, маленький и бесплатный.
Здесь уроки по использованию данного плагина: Basic Animation Tutorial! Happy Animating with IK!
Сколько раз я уже это писал... Может кто-нибудь новую статью напишет о конвертации моделей для варкрафта?
для блендера есть только один плагин - импортёр...
который глючный и совсем негодный...
напрямую конвертить не получится...
уж тем более с анимациями...
есть вариант конверта в милкшейп (опять че через сторонний аддон), а оттуда в .мдх
конвертит хорошо, с костями, но анимацию убивает...
есть NeoDex для 3dsMax, в котором по плану можно делать всё и конвертить напрямую в .мдх...
Берем основную модель, возможно, вообще без мяса, только с гусеницами, но с кучей точек крепления. Также берем кучу моделей-аттачметов, представляющих собой эти самые пушки, корпуса и все прочее. При выборе характеристик модели через диалог или интерфейс соответственно создаем на основной модели эффекты-аттачменты, будет собрана техника. Такие штуки, как двигатель и прочие невидные извне элементы будут скорее входить в математическую модель юнита, но это также можно запилить. Название танка - сразу не скажу, есть ли триггер на смену, но на таблице рекордов можно отобразить что угодно.
2.Тоже можно.
Создаем погодный в определенной местности и делаем два триггера для контроля входа-выхода юнитов из нее. На искомых юнитов применяем нужные способности - и все готово.
Здесь чуть сложнее: нужно постоянно проверять тип местности под юнитом, но тоже можно. Проверка на ограждения тоже может бить сделана.
4.Это уже интереснее. Видел раньше подобное в играх. При каждой атаке юнита случайным образом наносим или не наносим доп. урон, эффект горения, кидаем спелл на цель в зависимости от теоретического места попадания атаки.
5.И это можно. Но нужно писать нестандартную систему Альянса. Но через триггеры и JASS все можно...
Продажа техники - лучше через способность, что бы кидать ее на понравившегося юнита, не стоит покупать кота в мешке. Стоимость должна зависеть от технического уровня юнита, его текущего состояния (мертвый танк попадет вам бесплатно, сами чините!), если он был модернизован дополнительно, то это тоже входит в стоимость. Разрешение на продажу делаем аналогично.
Это легко через Custom Value и переменние.
Как ты понял, все что ты предложил создать можно, но на это нужно потрать хороший кусок времени. Остается пожелать тебе удачи над созданием проекта - мне идея уже нравится.
Автор где-то накосячил. В прикрепленной карте два героя. Один из них - невыделяемый. Когда горный король получает приказ стоп - он и второй герой получают +1 очко способностей. Отдавая приказ удержания позиции - -1 очко способностей. Это дело исправно отображается на их боковых иконках. Триггеры созданы при помощи триггерного GUI и, при этом, явно не без помощи индуса. Искать ошибку кому-либо кроме автора в нем - не рентабельно. (по факту - это проще переписать. Но у гуишников это занимает много времени, да)
» WarCraft 3 / Вопрос по опыту героев варкрафта.
» WarCraft 3 / Как заменить BJ-функции?
» WarCraft 3 / Помогите с утечками, пожалуйста)
» WarCraft 3 / Способности
» WarCraft 3 / Триггер не работает
» WarCraft 3 / Как мне сделать условие?
» WarCraft 3 / Вес моделей
» WarCraft 3 / Больше утечек
» WarCraft 3 / Похищение жизни/маны
» WarCraft 3 / Перевод карты на английский
» WarCraft 3 / Как заменить Wait на Таймер?
» WarCraft 3 / Как проверить наличие способности у юнита?
» WarCraft 3 / Посоветуйте карт
» WarCraft 3 / Neodex
» WarCraft 3 / Как сделать ауру активной?
» WarCraft 3 / Текстуры
» WarCraft 3 / Перегонка модели
» WarCraft 3 / Следы на земле
» WarCraft 3 / Золото
» Администрация XGM / Бан
» WarCraft 3 / Опять они
» Администрация XGM / Глюки
» WarCraft 3 / Способность с атакой
» WarCraft 3 / Blender
» WarCraft 3 / Можно ли как-то выбрать точки на карте?